package main

import "fmt"

type Stu struct {
	Name  string
	Age   int
	Score int
}

// 将 pupil 和 Graduate 共有发方法绑定到 student
func (stu *Stu) ShowInfo() {
	fmt.Printf("姓名：%v 年龄：%v 成绩：%v \n",
		stu.Name, stu.Age, stu.Score)
}

func (stu *Stu) SetScore(score int) {
	stu.Score = score
}

// 小学生
type Pupil struct {
	Stu // 嵌入 Stu 匿名结构体
}

// 大学生
type Graduate struct {
	Stu // 嵌入 Stu 匿名结构体
}

func (p *Pupil) testing() {
	fmt.Println("小学生考试中")
}

func (p *Graduate) testing() {
	fmt.Println("大学生考试中")
}

func main() {
	// 结构体嵌入 匿名结构体后

	p1 := &Pupil{}
	p1.Stu.Name = "zw"
	p1.Score = 90
	p1.Age = 18
	p1.testing()
	p1.SetScore(90)
	p1.ShowInfo()
	g1 := &Graduate{}
	g1.Name = "zw2"
	g1.testing()
}
